package com.ytclub.practice.server.dao;

import com.ytclub.practice.server.entity.po.PracticeDetailPO;
import com.ytclub.practice.server.entity.po.PracticeRankPO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 练习明细(practice_info_detail)表数据库访问层
 *
 * @author makejava
 * @since 2023-12-13 23:46:27
 */
public interface PracticeDetailDao {

    /**
     * 获取正确答案数量
     *
     * @param practiceId 练习id
     * @return 正确答案数量
     */
    int selectCorrectCount(Long practiceId);

    /**
     * 获取得分情况
     *
     * @param practiceId 练习id
     * @return 得分情况
     */
    List<PracticeDetailPO> selectByPracticeId(Long practiceId);

    /**
     * 插入练题记录
     *
     * @param practiceDetailPO 练习详情信息
     * @return 影响行数
     */
    int insertSingle(PracticeDetailPO practiceDetailPO);

    /**
     * 根据练习id，题目id，查询详情
     *
     * @param practiceId 练习id
     * @param subjectId  题目id
     * @param loginId    登录id
     * @return 练习详情
     */
    PracticeDetailPO selectDetail(@Param("practiceId") Long practiceId,
                                  @Param("subjectId") Long subjectId,
                                  @Param("loginId") String loginId);

    /**
     * 更新练习详情
     *
     * @param practiceDetailPO 练习详情信息
     * @return 影响行数
     */
    int update(PracticeDetailPO practiceDetailPO);

    /**
     * 获取答案情况
     *
     * @param practiceId 练习id
     * @param subjectId  题目id
     * @return 题目答案
     */
    PracticeDetailPO selectAnswer(@Param("practiceId") Long practiceId, @Param("subjectId") Long subjectId);

    /**
     * 获取排行榜情况
     *
     * @return
     */
    List<PracticeRankPO> getPracticeCount();

    /**
     * 删除练习详情
     *
     * @param practiceId 练习id
     * @return 影响行数
     */
    int deleteByPracticeId(Long practiceId);

}